#ifndef DITIGAL_ANALOG_CONVERTER
#define	DITIGAL_ANALOG_CONVERTER
// ***************************************************************************
// CHANGE LOG
//
// ***************************************************************************

// ***************************************************************************
// ***************************************************************************
// Section: Includes
// ***************************************************************************
// ***************************************************************************
#include <p32xxxx.h>
#include <plib.h>
#include <string>
#include "Spi.h"
#include <GenericTypeDefs.h>

// ***************************************************************************
// ***************************************************************************
// Section: Constants & Data Types
// ***************************************************************************
// ***************************************************************************

/*! \brief Allows writing to an Digital-To-Analog Converter(ADC) device
 */
class Dac8568C
{
  public:

	// Static Methods

	// Constructors
	Dac8568C(
		Spi *spi,
		float referenceVoltage,
		const UINT8 bitResolution,
		const IoPortId clearPort,
		const UINT32 clearPin);

	// Destructor
	virtual ~Dac8568C();

	// Methods
	void Write(const UINT8 channels, const float value, const bool update = true);
	void Reset();
	void Update(const UINT8 channels);
	void Clear(const UINT8 value);
	void PowerDown(const bool isNotPowered = false);
	void SetReferenceVoltage(const float referenceVoltage);

  private:
	float _referenceVoltage;
	UINT32 _quantizationLevels;
	Spi *_spi;
	IoPortId _clearPort;
	UINT32 _clearPin;

	// Methods
	void Initialize(Spi *spi, float referenceVoltage, UINT8 bitResolution, IoPortId clearPort, UINT32 clearPin);
};

#endif

